package bdsimple.impl.mysql;

import java.sql.ResultSet;

import bdsimple.abstractfactory.AbstractFactoryDAO;
import bdsimple.dao.base.ItemDAO;
import bdsimple.dao.base.ItemVentaDAO;
import bdsimple.dao.base.PropiedadVampiroDAO;
import bdsimple.dto.base.ItemDTO;
import bdsimple.dto.base.ItemVentaDTO;
import bdsimple.dto.base.PropiedadVampiroDTO;
import dao.base.api.IDTO;
import dao.base.impl.Reference;

public class ItemVentaDAOImpl extends MySQLBaseDAO implements ItemVentaDAO {

	public ItemVentaDAOImpl() {
		super(ItemVentaDTO.class);
	}

	@Override
	protected String createInsertCollst(IDTO dto) throws Exception {

		StringBuffer strbuf = new StringBuffer();

		strbuf.append(ItemVentaDTOImpl.NIVEL_DESGASTE);
		strbuf.append(", ");
		strbuf.append(ItemVentaDTOImpl.NIVEL_REPARACION);
		strbuf.append(", ");
		strbuf.append(ItemVentaDTOImpl.CANTIDAD);
		strbuf.append(", ");
		strbuf.append(ItemVentaDTOImpl.PRECIO_ITEM_VENTA);
		strbuf.append(", ");
		strbuf.append(ItemVentaDTOImpl.PROPIEDAD_VAMPIRO_REFERENCE);
		strbuf.append(", ");
		strbuf.append(ItemVentaDTOImpl.ITEM_REFERENCE);

		return strbuf.toString();

	}

	@Override
	protected String createInsertValues(IDTO dto) throws Exception {

		ItemVentaDTOImpl itemVentaDTOImpl = (ItemVentaDTOImpl) dto;

		StringBuffer strbuf = new StringBuffer();

		strbuf.append(itemVentaDTOImpl.getNivelDesgaste());
		strbuf.append(", ");
		strbuf.append(itemVentaDTOImpl.getNivelReparacion());
		strbuf.append(", ");
		strbuf.append(itemVentaDTOImpl.getCantidad());
		strbuf.append(", ");
		strbuf.append(itemVentaDTOImpl.getPrecioItemVenta());
		strbuf.append(", ");

		Reference<PropiedadVampiroDTO> ref1 = itemVentaDTOImpl
				.getPropiedadVampiroDTORef();
		ref1.checkInsert();
		strbuf.append(ref1.getIdAsString());
		
		strbuf.append(",");

		Reference<ItemDTO> ref = itemVentaDTOImpl.getItemDTORef();
		ref.checkInsert();
		strbuf.append(ref.getIdAsString());

		return strbuf.toString();

	}

	@Override
	protected String createTableColumns() throws Exception {

		PropiedadVampiroDAO propiedadvampiroDAO = (PropiedadVampiroDAO) //
		AbstractFactoryDAO.getFactoryDAO().getDAO( // 
				PropiedadVampiroDAO.class, connectionBean);

		ItemDAO itemDAO = (ItemDAO) //
		AbstractFactoryDAO.getFactoryDAO().getDAO( // 
				ItemDAO.class, connectionBean);

		StringBuffer strbuf = new StringBuffer();

		strbuf.append(ItemVentaDTOImpl.ID);
		strbuf.append(" INT PRIMARY KEY AUTO_INCREMENT, ");
		strbuf.append(ItemVentaDTOImpl.NIVEL_DESGASTE);
		strbuf.append(" INT, ");
		strbuf.append(ItemVentaDTOImpl.NIVEL_REPARACION);
		strbuf.append(" INT, ");
		strbuf.append(ItemVentaDTOImpl.CANTIDAD);
		strbuf.append(" INT, ");
		strbuf.append(ItemVentaDTOImpl.PRECIO_ITEM_VENTA);
		strbuf.append(" INT, ");
		strbuf.append(ItemVentaDTOImpl.PROPIEDAD_VAMPIRO_REFERENCE);
		strbuf.append(" INT REFERENCES ");
		strbuf.append(propiedadvampiroDAO.getTableName());
		strbuf.append(",");
		strbuf.append(ItemVentaDTOImpl.ITEM_REFERENCE);
		strbuf.append(" INT REFERENCES ");
		strbuf.append(itemDAO.getTableName());

		return strbuf.toString();

	}

	@Override
	protected String createUpdateValues(IDTO dto) throws Exception {

		ItemVentaDTOImpl itemVentaDTOImpl = (ItemVentaDTOImpl) dto;

		StringBuffer strbuf = new StringBuffer();

		strbuf.append(ItemVentaDTOImpl.NIVEL_DESGASTE);
		strbuf.append(" = ");
		strbuf.append(itemVentaDTOImpl.getNivelDesgaste());

		strbuf.append(", ");

		strbuf.append(ItemVentaDTOImpl.NIVEL_REPARACION);
		strbuf.append(" = ");
		strbuf.append(itemVentaDTOImpl.getNivelReparacion());

		strbuf.append(", ");

		strbuf.append(ItemVentaDTOImpl.CANTIDAD);
		strbuf.append(" = ");
		strbuf.append(itemVentaDTOImpl.getCantidad());

		strbuf.append(", ");

		strbuf.append(ItemVentaDTOImpl.PRECIO_ITEM_VENTA);
		strbuf.append(" = ");
		strbuf.append(itemVentaDTOImpl.getPrecioItemVenta());
		strbuf.append(", ");

		strbuf.append(ItemVentaDTOImpl.PROPIEDAD_VAMPIRO_REFERENCE);
		strbuf.append(" = ");
		Reference<PropiedadVampiroDTO> ref2 = itemVentaDTOImpl
				.getPropiedadVampiroDTORef();
		ref2.checkUpdate();
		strbuf.append(ref2.getIdAsString());
		strbuf.append(", ");

		strbuf.append(ItemVentaDTOImpl.ITEM_REFERENCE);
		strbuf.append(" = ");
		Reference<ItemDTO> ref = itemVentaDTOImpl.getItemDTORef();
		ref.checkUpdate();
		strbuf.append(ref.getIdAsString());

		return strbuf.toString();

	}

	@Override
	protected IDTO internalResultSetToDTO(ResultSet rs, IDTO dto)
			throws Exception {

		ItemVentaDTOImpl ret = (ItemVentaDTOImpl) dto;

		ret.setId(rs.getInt(ItemVentaDTO.ID));
		ret.setNivelDesgaste(rs.getInt(ItemVentaDTOImpl.NIVEL_DESGASTE));
		ret.setNivelReparacion(rs.getInt(ItemVentaDTOImpl.NIVEL_REPARACION));
		ret.setCantidad(rs.getInt(ItemVentaDTOImpl.CANTIDAD));
		ret.setPrecioItemVenta(rs.getInt(ItemVentaDTOImpl.PRECIO_ITEM_VENTA));

		Reference<PropiedadVampiroDTO> ref2 = ret.getPropiedadVampiroDTORef();
		ref2.setRefIdent(rs
				.getInt(ItemVentaDTOImpl.PROPIEDAD_VAMPIRO_REFERENCE));
		ref2.setRefValue(null);

		Reference<ItemDTO> ref = ret.getItemDTORef();
		ref.setRefIdent(rs.getInt(ItemVentaDTOImpl.ITEM_REFERENCE));
		ref.setRefValue(null);

		return ret;

	}

}
